home *** CD-ROM | disk | FTP | other *** search
-
- function CheckboxMenu(id, data, persistkeys, globals)
- {
- this.id = id;
- this.menuCheckboxIds = new Array();
- this.data = data;
- this.count = 0;
-
- var element = document.getElementById(id);
- var checkboxNodes = element.getElementsByTagName("input");
-
- for(var checkboxCount=0; checkboxCount < checkboxNodes.length; checkboxCount++)
- {
- var checkboxId = checkboxNodes[checkboxCount].getAttribute('id');
- var checkboxData = checkboxNodes[checkboxCount].getAttribute('data');
- var dataSplits = checkboxData.split(',');
- var defaultValue = checkboxNodes[checkboxCount].getAttribute('value');
- if (checkboxData != null && checkboxData.indexOf("persist") != -1)
- persistkeys.push(checkboxId);
-
- this.menuCheckboxIds[dataSplits[0]] = checkboxId;
-
- // try to get the value for this checkbox id from globals
- var persistedValue = (globals == null) ? null : globals.VariableExists(checkboxId) ? globals.VariableValue(checkboxId) : null;
- var currentValue = (persistedValue != null) ? persistedValue : (defaultValue == null) ? "on" : defaultValue;
-
- // set the checkbox's check state
- this.SetCheckState(checkboxId, currentValue);
-
- this.count++;
- }
- }
-
- CheckboxMenu.prototype.SetCheckState=function(id, value)
- {
- var checkbox = document.getElementById(id);
- if(checkbox != null)
- {
- checkbox.checked = (value == "on") ? true : false;
- }
-
- // set the value for the checkbox id in the data array
- this.data[id] = value;
- }
-
- CheckboxMenu.prototype.GetCheckState=function(id)
- {
- var checkbox = document.getElementById(id);
- if(checkbox != null)
- return checkbox.checked;
- return false;
- }
-
- CheckboxMenu.prototype.ToggleCheckState=function(id)
- {
- // at least one checkbox must always be checked
- var checkedCount = this.GetCheckedCount();
-
- if(this.data[id] == "on" && checkedCount > 1)
- this.SetCheckState(id, "off");
- else
- this.SetCheckState(id, "on");
- }
-
- // returns the checkbox id associated with a key
- CheckboxMenu.prototype.GetCheckboxId=function(key)
- {
- return this.menuCheckboxIds[key];
- }
-
- // returns the array of checkbox ids
- CheckboxMenu.prototype.GetCheckboxIds=function()
- {
- return this.menuCheckboxIds;
- }
-
- // returns the @data attribute of the checkbox element
- CheckboxMenu.prototype.GetCheckboxData=function(checkboxId)
- {
- var checkbox = document.getElementById(checkboxId);
- if (checkbox == null) return "";
- return checkbox.getAttribute('data');
- }
-
- CheckboxMenu.prototype.GetDropdownLabelId=function()
- {
- var checkboxCount = this.count;
- var checkedCount = this.GetCheckedCount();
- var idPrefix = this.id;
-
- // if all boxes checked, use showall label
- if (checkedCount == checkboxCount)
- return idPrefix.concat("AllLabel");
-
- // if only one is checked, use label appropriate for that one checkbox
- if (checkedCount == 1)
- {
- for(var key in this.menuCheckboxIds)
- {
- if (this.data[this.menuCheckboxIds[key]] == "on")
- {
- return idPrefix.concat(key,'Label');
- }
- }
- }
-
- // if multiple or zero checked, use multiple label
- return idPrefix.concat("MultipleLabel");
- }
-
- CheckboxMenu.prototype.GetCheckedCount=function()
- {
- var count = 0;
- for(var key in this.menuCheckboxIds)
- {
- if (this.data[this.menuCheckboxIds[key]] == "on")
- count++;
- }
- return (count);
- }
-
- // returns an array containing the ids of the checkboxes that are checked
- CheckboxMenu.prototype.GetCheckedIds=function()
- {
- var idArray = new Array();
- for(var key in this.menuCheckboxIds)
- {
- if (this.data[this.menuCheckboxIds[key]] == "on")
- idArray.push(this.menuCheckboxIds[key]);
- }
- return idArray;
- }
-
- CheckboxMenu.prototype.GetGroupCheckedCount=function(checkboxGroup)
- {
- var count = 0;
- for(var i = 0; i < checkboxGroup.length; i++)
- {
- if (this.data[checkboxGroup[i]] == "on")
- count++;
- }
- return (count);
- }
-
- CheckboxMenu.prototype.ToggleGroupCheckState=function(id, checkboxGroup)
- {
- // at least one checkbox must always be checked
- var checkedCount = this.GetGroupCheckedCount(checkboxGroup);
-
- // if the group has multiple checkboxes, one must always be checked; so toggle to "off" only if more than one currently checked
- // if the group has only one checkbox, it's okay to toggle it on/off
- if(this.data[id] == "on" && (checkedCount > 1 || checkboxGroup.length == 1))
- this.SetCheckState(id, "off");
- else
- this.SetCheckState(id, "on");
- }
-
-